<?php

/**
 * Formulario base utilizado para realizar consultas sobre los precios
 * de un producto.
 *
 * @package    AltargetEcommerce
 * @subpackage form
 * @author     Carlo Lopez <carlo.xavier.lopez@gmail.com>
 */
abstract class PricingRequestForm extends sfFormSymfony
{
  protected $nombreprod = ''; //nombre del producto  

  public function setup()
  {

    //coloca el parametro de nombre de producto
    //$this->setWidget('producto',new sfWidgetFormInputHidden());

    $producto = new sfWidgetFormInputHidden();
    $producto->setDefault($this->nombreprod);
    $this->setWidgets(array(
      'producto' => $producto,
      ));

    $this->setValidators(array(
      'producto' => new sfValidatorChoice(array('choices' => array($this->nombreprod), 'empty_value' => NULL, 'required' => true)),
      ));

    $this->widgetSchema->setNameFormat('pricing[%s]');
    parent::setup();  
  }//setup

  /*
   * devuelve el nombre del producto para el que se 
   * prepara el formulario.
   */
  public function getNombreProd()
  {
    return $this->nombreprod;
  }

  /*
   * Devuelve un presupuesto calculado en base a las solicitudes
   * que el cliente hizo en este formulario.
   */
  abstract public function calcCotizacion(sfWebRequest $req);

  public function setNombreProd($nombre)
  {
    $this->nombreprod = $nombre;
    $this->widgetSchema['producto']->setDefault($nombre);

  }

  public function doBind(array $values)
  {
    if( isset($values['producto']) )
      $this->getWidgetSchema()->setDefault('producto',$values['producto']);
    else
      throw new sfException('No existe el parametro \'producto\' en la solicitud ' . $this->getName());
    parent::doBind($values);
  }
}
